cc-pocket · ui 2.1 · defaults + voice + results · direction

Defaults + Voice + Results Direction v1

Three implemented surfaces, three bounded visual questions, nine candidates. Every frame is the same live component under different props, so the comparisons are real renders rather than drawings. Nothing here changes semantics, data, routes, copy, persistence, protocol or desktop behaviour — the candidates differ only in grouping, hierarchy and mark vocabulary.

direction only
no file edited
3 questions
selected S3 · V3 · R3
402 · 390 · 320 · 280
+ 200% text
1

Agent & session defaults · #237

The page is dense and the selected Codex model only appears after substantial scrolling.

The catalogue is daemon-owned and may be long, legacy or custom, so the list itself cannot be shortened, aliased, truncated or hidden. The only thing a visual refinement can change is how quickly the page answers “what will a new session actually use?”.

S1 · uniform low containers
Every group becomes a low container, including the permission modes that are currently bare hairline rows. Consistent, and the cheapest change on the board.

Why not. It makes the page tidier without making it shorter. The model you are actually running is still four groups down, and each container adds vertical padding — at 200% it pushes the answer further away, which is the opposite of the ask.
S2 · collapse each group to its selection
Each group shows its current value on one row and expands in place. The whole page fits one screen and every selected value is visible at once.

Rejected on a boundary, not on taste. “No hidden controls” is explicit. A collapsed group hides every unselected model behind a disclosure, and a stale or unknown selected value would be the only thing on screen with no visible context to correct it from. It also costs a tap on the page's most common edit.
S3 · anchored summary, lists stay open ✓
One read-only low container under the title repeats the existing group labels against their live stored values — agent, mode, model, effort, and Fast while priority is active — with model and effort in monospace, complete and wrapping. It carries no heading and no new string of its own. Every list below stays fully open exactly as today.

Selected. It answers the scrolling complaint in the first 150 dp without hiding a single control, and it is the only candidate that survives a stale value: the summary prints whatever is stored, wrapped and readable, while the list below still shows it in place.
S3 · scrolled model + effort region
Scoped group labels carry for Codex, so scrolling past the agent selector never loses which agent's defaults are on screen. Default is a real nullable choice and sits first, in prose, above the monospace values. Fast follows effort and is present only because this model advertises priority.
S3 · long custom id · 320 dp stress
The specialized long-context id at the narrowest supported width wraps on characters in both the summary and the row. No ellipsis, no shrunk type, no horizontal scroll — an id that cannot be read cannot be audited.
S3 · 200% text · 中文
This is where S3 earns its place. At 200% the title still wraps and the lists still grow, but the first screen now carries the five stored values instead of stopping inside the agent list. Targets go to 58 dp; the summary is not interactive and takes no target budget.
2

Voice-aware composer · #238

Truthful and non-overlapping today; the action hierarchy is what needs calming.

All three candidates are shown in the hardest state the brief names: 320 dp, streaming, with a wrapped draft staged — Stop and Send both live, Mic still in the field, and the cross-session switcher present in the accessory lane. Nothing about which controls exist changes; only how the bands are stacked. Product copy in these frames is the existing resource text verbatim.

V1 · today · three bands
The queue note sits below the accessory row, so the reason Send behaves unusually arrives after the button. Three bands of near-equal weight, and the eye has no order to follow.
V2 · note on top, one wrapping lane
The note moves above the field and attach, model, switcher, context, Stop and Send share one wrapping lane. Two bands instead of three, and the note now precedes the button it explains.

Why not. As bare text with no mark it reads as a caption on the transcript above rather than as state belonging to the composer below — and a voice failure chip looks identical to a queue note.
V3 · state ribbon + one lane ✓
Same two bands as V2, but the note gains a small mark and becomes a ribbon that belongs to the composer surface it sits on. Reading order is now state, then draft, then actions.

Selected. One ribbon slot carries queue, upload and voice-failure copy, so eight states share one structure instead of three ad-hoc bands. The mark shape distinguishes a failure ribbon from an informational one without relying on colour.
V3 · 280 dp · whole buttons wrap
With attach, model, switcher and context all present, the lane can no longer seat the actions beside them, so Stop and Send wrap as whole controls onto their own full-width line at 48 dp. Nothing clips, overlaps, shrinks or scrolls sideways.
V3 · the four states that decide the structure · 320 dp
Streaming, empty. Stop alone — no Mic and no Send. The ribbon carries the existing queue sentence, so the rule is stated before a draft exists to test it.
Upload in flight. No Send control exists at all — the action slot holds progress only, announced as upload status rather than as a disabled button. The ribbon writes the real count and Mic stays in the field.
Recording while streaming. RecordingBar replaces the ordinary composer entirely — attach, model, switcher, context, Mic and Send are all absent. It stays cancel + waveform + timer + Done, and the separate Stop row below is the only agent-turn action left. Transcribing is the same bar with a spinner and the existing transcribing string.
Voice failure with a draft. The existing failure chip sits above the field; the field's trailing action becomes Retry voice input in place of Mic — never Dictate — and Send stays separately reachable. No third retry button is added to the lane.
3

New Result in Sessions · #239

Weaker than Approval and Answer, distinct from Running, clearly stronger than Complete.

Precedence, derivation, persistence and ordering are fixed. The question is narrow: which mark makes New Result read as its own rung on the ladder. All three candidates keep the written label and the attention tone.

R1 · today · ring in attention tone
Correct in every respect except one: Complete is also a ring. The two rungs differ only by colour, which the system's own rule says cannot carry the distinction alone.
R2 · filled dot in attention tone
Separates cleanly from Complete and reads as important.

Why not. It collides upward: a filled dot is Running's mark, so two rows that mean opposite things — still working, finished while you were away — differ only by hue.
R3 · half-filled dot ✓
Fill becomes the ladder: solid is Running, half is New Result, hollow is Complete. One shape family, three unambiguous rungs, and the diamonds above stay reserved for Approval and Answer.

Selected. It reads correctly with colour removed entirely, which neither R1 nor R2 does.
R3 · full precedence ladder · light
All six rungs at once, in order: filled diamond, hollow diamond, square, filled dot, half dot, hollow dot. Ordering is the daemon's; this frame only proves the marks stay separable when they are adjacent, in both palettes.

Recommended direction · S3 + V3 + R3

One idea, three surfaces

Each selected candidate states the current situation in words at the top of its surface, then leaves the existing controls untouched below. The defaults summary, the composer ribbon and the written state label are the same move at three scales, which is why they cost one implementation pattern rather than three.

Nothing is hidden to gain it

S2 was the shortest page on the board and is rejected because it hides controls. No selected candidate introduces a disclosure, overflow, swipe, horizontal scroll, type shrink or id ellipsis. Every list that is open today stays open, and every control keeps its 48 dp floor.

Colour is never load-bearing

R3 makes fill carry the session ladder and V3 makes shape separate a failure ribbon from an informational one. Both read correctly in greyscale, which is the standing rule the current ring-versus-ring pairing quietly breaks.

What changes, precisely
defaults page
One read-only summary block gains a slot under the title. Group labels for model and effort gain the existing agent-scope string. No row, control, order or value changes.
composer
The existing queue, upload and transcription-failure strings move above the field into one ribbon slot with a state mark; the accessory row becomes a single wrapping lane that includes the conditional switcher. Same controls, same predicates, same resource strings.
sessions row
The New Result mark changes from a ring to a half-filled dot. Tone, written label, precedence, derivation, persistence and ordering are untouched.
test surface
All three land in the existing Compose composables and their desktop UI test renders. No protocol, daemon, relay or desktop change is implied by any of them.
Open for the master
Summary wording is a resource question

The block is built only from existing group labels and stored values, so it introduces no string. The master should confirm the pairs render from the same resources the groups below use rather than duplicating them, and diff the ZH composer strings against the resource file.

Codex Fast and the later groups

Fast is proven here because the fixture's selected model advertises priority. Context window, custom value, per-model overrides and the agent filter are unchanged and sit below these frames; the master owes the full scroll, including the summary dropping Fast when a non-priority model is selected.

Eight composer states, not four

This board proves the ribbon on the four that determine structure. The master owes the full strip — idle, staged, streaming empty, streaming staged, upload, recording, transcribing, failure — at 402, 390, 320, 280 and 200%.

Held to, throughout
no route · field · status · value · copy added
no catalogue invented, aliased or truncated
inspected fixture only · Default stays nullable
no timestamp or optimistic New Result
no Settings landing, transcript or Quick Actions change
#232 · #233 · #216 · #228 untouched